function memoize(fn) {
  // 创建一个 Map 对象用于缓存
  const cache = new Map()

  // 返回一个新的函数，该函数会检查缓存
  return function (...args) {
    // 将参数序列化为字符串作为缓存的键
    const key = JSON.stringify(args)

    // 如果缓存中存在该键，直接返回缓存的结果
    if (cache.has(key)) {
      return cache.get(key)
    }

    // 否则，调用原始函数并缓存结果
    const result = fn(...args)
    cache.set(key, result)
    return result
  }
}

// 初始化计数器
const count = 0

// 定义一个简单的加法函数
const add = (a, b) => {
  // 增加计数器（注意：这里有个问题，count 是常量，不能被修改）
  count += 1
  return a + b
}

// 使用 memoize 包装 add 函数
const memoizedAdd = memoize(add)

// 调用 memoizedAdd 函数并输出结果
console.log(memoizedAdd(4, 5)) // 第一次调用，计算并缓存结果
console.log(memoizedAdd(4, 5)) // 第二次调用，直接从缓存中获取结果
